package com.demo.function.mybatis.pagehelper;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.demo.mapper.UserMapper;
import com.demo.model.entity.User;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 分页服务
 */
@Service
public class UserPageService extends ServiceImpl<UserMapper, User> {

    @Resource
    private UserMapper userMapper;

    /**
     * 第一种分页查询方式
     * @param userId 用户id
     * @param pageNum 当前页
     * @param pageSize 每页大小
     * @return 数据集合
     */
    public List<User> getUserListByUserIdGt(Long userId, int pageNum, int pageSize) {
        PageHelper.startPage(pageNum, pageSize);
        return userMapper.queryByUserIdGt(userId);
    }

    /**
     * 第二种分页查询方式
     * @param userId 用户id
     * @param pageNum 当前页
     * @param pageSize 每页大小
     * @return 数据集合
     */
    public List<User> getUserListByUserIdGtV2(Long userId, int pageNum, int pageSize) {
        return userMapper.queryByUserIdGtV2(userId, pageNum, pageSize);
    }

    /**
     * 第三种分页查询方式
     * @param userId 用户id
     * @param pageNum 当前页
     * @param pageSize 每页大小
     * @return 数据集合
     */
    public Page<User> queryUseLambda(Long userId, int pageNum, int pageSize) {
        return PageHelper.startPage(pageNum, pageSize).doSelectPage(() -> userMapper.queryByUserIdGt(userId));
    }

    /**
     * 第四种分页查询方式
     * @param userId 用户id
     * @param pageNum 当前页
     * @param pageSize 每页大小
     * @return 数据集合
     */
    public PageInfo<User> queryUseLambdaV2(Long userId, int pageNum, int pageSize) {
        return PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(() -> userMapper.queryByUserIdGt(userId));
    }

    /**
     * 统计记录数
     * @param userId 用户id
     * @return 记录数
     */
    public long countData(Long userId) {
        return PageHelper.count(() -> userMapper.queryByUserIdGt(userId));
    }
}
